# coding=utf-8
from gm.api import run, MODE_BACKTEST, ADJUST_PREV, schedule
from datetime import datetime
from quant.trader import juejin
from ruamel import yaml
import pathlib
from easydict import EasyDict

# 策略中必须有init方法
def init(context):
    etfs = EasyDict(yaml.safe_load(pathlib.Path('./etfs.yml').open(encoding='utf-8').read()))
    st = juejin.EtfRotate(trade_days=25, etfs=etfs.行业轮动, threshold=0.05)
    schedule(schedule_func=st.rotate,
             date_rule='1d',
             time_rule='14:45:00')


if __name__ == '__main__':
    '''
        strategy_id策略ID, 由系统生成
        filename文件名, 请与本文件名保持一致
        mode运行模式, 实时模式:MODE_LIVE回测模式:MODE_BACKTEST
        token绑定计算机的ID, 可在系统设置-密钥管理中生成
        backtest_start_time回测开始时间
        backtest_end_time回测结束时间
        backtest_adjust股票复权方式, 不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
        backtest_initial_cash回测初始资金
        backtest_commission_ratio回测佣金比例
        backtest_slippage_ratio回测滑点比例
        '''
    run(strategy_id='228a51e7-fa06-11ec-bc0f-00155dd03b25',
        filename='main.py',
        mode=MODE_BACKTEST,
        token='9dc704d3ed377bc76c94e882baea6816e93eff27',
        backtest_start_time='2022-01-01 08:00:00',
        backtest_end_time='%s 16:00:00' % datetime.now().date(),
        backtest_adjust=ADJUST_PREV,
        backtest_initial_cash=10000000,
        backtest_commission_ratio=0.0001,
        backtest_slippage_ratio=0.0001)
